package com.thp.bigdata.wcdemo;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
/**
 * 输入的类型要跟Map阶段的输出的类型对应
 * 
 * KEYOUT, VALUEOUT 自定义Reduce逻辑处理结果的输出数据类型
 * KEYOUT 是单词
 * VALUEOUT 是总次数
 * @author 汤小萌
 * 
 */
public class WordcountReduce extends Reducer<Text, IntWritable, Text, IntWritable>{
	/**
	 * 入参 key : 是一组相同单词kv对的key
	 * 同一组 <hello,1>  <hello,1>  <hello,1>  <hello,1>  <hello,1>
	 * key 指的是 hello , 只需要一个 因为一组的单词是一样的  ,
	 * values 就是迭代器了,可以迭代里面的每一个 1 进行计数
	 */
	// 每一次调用reduce是完成了一组单词的统计,下一次调用就是统计另一组的单词的统计
	@Override
	protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
		
		//
		System.out.println("Reducer输入分组<" + key.toString() + ",N(N>=1)>");
		
		int count = 0;
		for(IntWritable value : values) {
			count += value.get();  // 这个count 最后就是某一个单词的汇总的值
			// 显示次数表示输入的k2,v2的键值对数量
			System.out.println("Reducer输入键值对<" + key.toString() + "," + value.get() + ">");
		}
		context.write(key, new IntWritable(count));
	}
}
